package com.blue.base.security.api;

import com.blue.base.common.exception.BaseException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;

import java.util.List;

/**
 * @author liulei
 * @version 1.0
 */
public interface AuthService extends UserDetailsService {

    /**
     * 用戶登录成功后生成token
     *
     * @param userDetails 用户信息
     * @return 用户信息[用户登录成功后的回显]
     */
    String generateTokenByAccount(UserDetails userDetails);

    /**
     * 用户登录成功后其他操作
     *
     * @param userDetails
     */
    default void doOtherAfterLoginSucceed(UserDetails userDetails) {
    }

    /**
     * 用户登录失败后其他操作
     *
     * @param userDetails
     */
    default void doOtherAfterLoginFail(UserDetails userDetails){

    }

    /**
     * 根据Token获取账户信息[只需要按照jwt的规则解析即可]
     *
     * @param token token
     * @return true
     * @throws BaseException 异常需要直接抛出
     */
    String getAccountByToken(String token) throws BaseException;

    /**
     * 判断请求是否通过权限校验
     *
     * @param roles       用户含有的角色信息
     * @param servletPath 请求路径
     * @return boolean
     */
    boolean hasRight(List<String> roles, String servletPath);
}
